<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2019/12/30
 * Time: 16:03
 */

namespace app\api\controller\v1;
use app\api\controller\v1\common\Common;

use app\api\model\v1\User as userModel;
use app\api\model\v1\User2 as userModel2;
use app\api\model\v1\User2;
use think\Controller;
use think\Loader;
use app\api\controller\Validate\User as userValidate;
use app\api\model\v1\Register as registerModel;
use app\api\model\v1\Email as emailModel;
use app\api\controller\v1\Mail;

class User extends Common
{
    //登录接口
    public function login(){
        //使用模型进行数据库的操作
        $params = input("post.");//input 一个内置的助手函数用户接受各种传递的参数
        //此处还应该需要做一次表单验证 ... (略去)
        // $res = Array ( [0] => Array ( [USERNAME] => 曾志杰 [USERNICK] => 西门杰 [UID] => 16 ) ) 返回的是一个二维数组;
        $res = userModel::login($params);
        if(!$res){
            Common::toJson(0,"登录失败!");
        }else{
            //生成token
            $token = md5($res[0]['UID'].time().mt_rand(10000,99999));
            //将颁发过的token要记录到数据库中
            $res[0]['token'] = $token;
            $resToken = userModel::recordToken($token,$res[0]['UID']);
            $resHistory = userModel::recordHistory($res[0]['UID'],$res[0]['USERNAME']);
            if($resToken && $resHistory){//已经成功写入数据库 再把cookie 设置给游览器 并提示登陆成功
                setcookie('UID',$res[0]['UID'],time()+30*24*60*60);
                setcookie('USERNICK',$res[0]['USERNICK'],time()+30*24*60*60);
                setcookie('TOKEN',$token,time()+30*24*60*60);
                Common::toJson(200,"登录成功!",$res);
            }else{
                Common::toJson(0,"登录失败!");
            }
        }
    }

    //注册接口
    function register(){
        //自动对指定的字段数据进行额外操作, 需要使用create方法添加
        /*
         * 1.验证注册用户名是否重复
         * 2.插入数据库
         * 3.成功或失败返回消息提示用户
         *
         * */
        //获取用户传递的注册信息;
        $params = input("post.");
        $res = registerModel::register($params);//返回值为最新插入数据的uid
        $email = $params['EMAIL'];
        if($res>0){
            $res2 = registerModel::registerCode($res);
            $content = '<a href="http://api.jg.com/user/activeCode?code='.$res2.'">点击链接激活密码</a>';
            Mail::sendMail($email,$content);
            Common::toJson(200,"登陆邮箱进行激活验证");
        }else{
            Common::toJson(0,"注册失败!");
        }
    }

    //验证用户名唯一性
    function singleName(){
        $username = $_POST['USERNAME'];
        //$username = '曾志杰';
        $res = registerModel::registerCheck($username);
        if(count($res)!=0){
           common::toJson(200,'该用户已注册',0);
           exit;
        }
        common::toJson(200,'用户名注册成功',1);

//        $json = json_encode($username,JSON_UNESCAPED_UNICODE);
//        echo $json;
        //print $username;
    }
    function activeCode(){
          $code = $_GET['code'];
          $res = emailModel::checkCode($code);
          if($res>0){
              common::toJson(200,'注册成功',1);
          }else{
              common::toJson(200,'注册失败',0);
          }
        //return var_dump($res);
    }

    //测试验证器
    function test(){
        //定义个数据的校验规则
        $rules = [
            'name'=>'require|max:10',
            'pwd'=>'require',
            'age'=>'between:1,120'
        ];
        //模拟数据
        $data = [
            'name'=>'hello',
            'pwd'=>123456,
            'age'=>20
        ];

        $validate = new Validate($rules); //创建一个验证器

        if(!$validate->check($data)){
            return '数据校验失败!';
        }

        return '数据校验成功!';
    }

    //测试验证器2
    function test2(){
        //模拟数据
        $data = [
            'name'=>"",
            'age'=>20,
            'email'=>"sadas@qq.com"
        ];
        //使用定义的验证器
        $validate = new userValidate();
        if(!$validate->check($data)){
            return $validate->getError();
        }
        return '验证表单成!';
    }
}